package model.dao;

import java.util.List;

import javax.persistence.TypedQuery;

import model.basicas.FolhaPagamento;
import model.basicas.Funcionario;
import model.basicas.Usuario;
import model.interfaces.*;



public class FuncionarioDAO extends GenericoDAO<Funcionario> implements IFuncionarioDAO {


	@Override
	public void inserir(Funcionario objeto) {

		if(!this.getEntitymanager().getTransaction().isActive())
		{
			this.getEntitymanager().getTransaction().begin();
		}
		this.getEntitymanager().persist(objeto);
		this.getEntitymanager().getTransaction().commit();
	}

	@Override
	public void remover(Funcionario objeto) {

		if(!this.getEntitymanager().getTransaction().isActive())
		{
			this.getEntitymanager().getTransaction().begin();
		}

		Funcionario aux = consultarPorId(objeto.getIdFuncionario());
		if (aux != null)
		{
			this.getEntitymanager().remove(aux);
			this.getEntitymanager().getTransaction().commit();
		}
	}

	@Override
	public Funcionario atualizar(Funcionario objeto) {
		
		if(!this.getEntitymanager().getTransaction().isActive())
		{
			this.getEntitymanager().getTransaction().begin();
		}
		
		Funcionario aux = consultarPorId(objeto.getIdFuncionario());
		if(aux != null){
			this.getEntitymanager().merge(objeto);
			this.getEntitymanager().getTransaction().commit();
		}
		
		return objeto;

	}

	@Override
	public List<Funcionario> listarCadastrados() {

		TypedQuery<Funcionario> q = this.getEntitymanager().createQuery
				("select f from Funcionario f", Funcionario.class);

		List<Funcionario> list = q.getResultList();	

		return list;
	}

	@Override
	public Funcionario consultarPorCpf(String cpf) {
		
		return this.getEntitymanager().find(Funcionario.class, cpf);
	}

	@Override
	public Funcionario consultarPorMatricula(String matricula) {
		
		return this.getEntitymanager().find(Funcionario.class, matricula);
	}

	@Override
	public Funcionario consultarPorId(long id) {
			
		return this.getEntitymanager().find(Funcionario.class, id);
	}



}


